import cv2

def face_detection():
    # 初始化摄像头
    cap = cv2.VideoCapture(0)
    
    # 尝试设置分辨率（实际分辨率取决于硬件支持）
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 768)
    
    # 获取实际分辨率（调试用）
    actual_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    actual_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print(f"实际分辨率: {actual_width}x{actual_height}")
    
    # 加载预训练的人脸检测模型（Haar级联分类器）
    face_cascade = cv2.CascadeClassifier(
        cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
    )
    
    while True:
        ret, frame = cap.read()
        if not ret:
            print("无法获取视频帧")
            break
        
        # 转换为灰度图（人脸检测需要）
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        
        # 人脸检测
        faces = face_cascade.detectMultiScale(
            gray,
            scaleFactor=1.1,    # 图像缩放因子
            minNeighbors=5,     # 检测框最小邻居数
            minSize=(30, 30)    # 最小人脸尺寸
        )
        
        # 用蓝色矩形框标注人脸
        for (x, y, w, h) in faces:
            cv2.rectangle(
                frame, 
                (x, y),         # 左上角坐标
                (x+w, y+h),     # 右下角坐标
                (255, 0, 0),    # 蓝色（BGR格式）
                2               # 线宽
            )
        
        # 显示实时画面
        cv2.imshow('Face Detection', frame)
        
        # 按'q'退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放资源
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    face_detection()